{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Quickstart to Selene\n",
    "\n",
    "This tutorial uses the same data and setup as [`getting_started_with_selene.ipynb`](https://github.com/FunctionLab/selene/blob/master/tutorials/getting_started_with_selene/getting_started_with_selene.ipynb), but excludes all the background and data preparation work.\n",
    "It shows the minimal amount of code needed to run Selene itself.\n",
    "\n",
    "## Setup\n",
    "\n",
    "**Architecture:** We use a file [`deeperdeepsea.py`](https://github.com/FunctionLab/selene/tree/master/tutorials/getting_started_with_selene/deeperdeepsea.py) that doubles the number of convolutional layers that DeepSEA has. Note that the architecture file has the same format as [`deepsea.py`](https://github.com/FunctionLab/selene/blob/master/models/deepsea.py) (it contains the model architecture class, the method `criterion`, and the method `get_optimizer(lr)`). All model architecture files should have these 3 components. \n",
    "\n",
    "**Data:** We downloaded the measurements for transcription factor CTCF in cell type GM12878 from ENCODE. More information about the data is in the \"Getting Started\" tutorial. For data sampling, we are going to use Selene's `IntervalsSampler`, which will create samples on-the-fly by randomly selecting positions from a specific set of regions (see note) and using the **1000bp** sequences centered at those positions as the inputs to the model. Further, to assign the targets associated with each 1000bp sequence, the sampler queries a tabix-indexed targets file for the genomic features that overlap with the middle **200bp** region of the sequence. **You can refer to [simple_train.yml](https://github.com/FunctionLab/selene/blob/master/tutorials/quickstart_training/simple_train.yml) to see how this is specified.**\n",
    "\n",
    "_Note: The regions we use are regions from the DeepSEA dataset which contain at least 1 transcription factor._\n",
    "\n",
    "\n",
    "## Download the data\n",
    "\n",
    "Download the compressed data from here:\n",
    "\n",
    "```sh\n",
    "wget https://zenodo.org/record/1443558/files/selene_quickstart.tar.gz\n",
    "```\n",
    "\n",
    "Extract it and `mv` all files from the extracted directory `selene_quickstart_tutorial` to the current directory."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from selene_sdk.utils import load_path\n",
    "from selene_sdk.utils import parse_configs_and_run"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that these are also the only 2 lines of code in the Selene repository's command-line script [`selene_cli.py`](https://github.com/FunctionLab/selene/selene_cli.py).\n",
    "\n",
    "Before running `load_path` on `simple_train.yml`, please edit the YAML file to include the absolute path of the model file.\n",
    "\n",
    "Currently, the model is set to train on GPU. If you do not have CUDA on your machine, please set `use_cuda` to `False` in the configuration file. (This will slow down the process considerably.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "configs = load_path(\"./simple_train.yml\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Outputs and logs saved to ./training_outputs\n",
      "2018-12-09 17:17:05,314 - Creating validation dataset.\n",
      "2018-12-09 17:17:24,068 - 18.75204062461853 s to load 32000 validation examples (500 validation batches) to evaluate after each training step.\n",
      "2018-12-09 17:43:42,381 - [STEP 1000] average number of steps per second: 0.6\n",
      "2018-12-09 17:47:12,867 - validation roc_auc: 0.8921169483418366\n",
      "2018-12-09 17:47:12,870 - validation average_precision: 0.3021035248134967\n",
      "2018-12-09 17:47:13,552 - training loss: 0.13428741693496704\n",
      "2018-12-09 17:47:13,554 - validation loss: 0.07002205275185407\n",
      "2018-12-09 18:13:29,095 - [STEP 2000] average number of steps per second: 0.6\n",
      "2018-12-09 18:16:59,593 - validation roc_auc: 0.9544676737882652\n",
      "2018-12-09 18:16:59,596 - validation average_precision: 0.4223925314701175\n",
      "2018-12-09 18:17:00,180 - training loss: 0.0670393630862236\n",
      "2018-12-09 18:17:00,182 - validation loss: 0.05626895484235138\n",
      "2018-12-09 18:43:14,730 - [STEP 3000] average number of steps per second: 0.6\n",
      "2018-12-09 18:46:45,390 - validation roc_auc: 0.9641567681760205\n",
      "2018-12-09 18:46:45,392 - validation average_precision: 0.46731362352522193\n",
      "2018-12-09 18:46:46,055 - training loss: 0.04959407448768616\n",
      "2018-12-09 18:46:46,057 - validation loss: 0.05062520516011864\n",
      "2018-12-09 19:13:00,114 - [STEP 4000] average number of steps per second: 0.6\n",
      "2018-12-09 19:16:30,743 - validation roc_auc: 0.9672102200255102\n",
      "2018-12-09 19:16:30,745 - validation average_precision: 0.4625667565017098\n",
      "2018-12-09 19:16:31,299 - training loss: 0.04335814714431763\n",
      "2018-12-09 19:16:31,300 - validation loss: 0.04961855149129406\n",
      "2018-12-09 19:42:46,042 - [STEP 5000] average number of steps per second: 0.6\n",
      "2018-12-09 19:46:16,874 - validation roc_auc: 0.9726540078922193\n",
      "2018-12-09 19:46:16,877 - validation average_precision: 0.4880236379790449\n",
      "2018-12-09 19:46:17,502 - training loss: 0.02604123204946518\n",
      "2018-12-09 19:46:17,503 - validation loss: 0.04745704824756831\n",
      "2018-12-09 20:12:32,976 - [STEP 6000] average number of steps per second: 0.6\n",
      "2018-12-09 20:16:03,773 - validation roc_auc: 0.9713347516741071\n",
      "2018-12-09 20:16:03,776 - validation average_precision: 0.4901354505207583\n",
      "2018-12-09 20:16:03,779 - training loss: 0.041934214532375336\n",
      "2018-12-09 20:16:03,780 - validation loss: 0.048094069119077175\n",
      "2018-12-09 20:42:19,262 - [STEP 7000] average number of steps per second: 0.6\n",
      "2018-12-09 20:45:49,579 - validation roc_auc: 0.9721155532525512\n",
      "2018-12-09 20:45:49,582 - validation average_precision: 0.5009437395425271\n",
      "2018-12-09 20:45:50,183 - training loss: 0.04448128864169121\n",
      "2018-12-09 20:45:50,185 - validation loss: 0.04686457228520885\n",
      "2018-12-09 21:10:54,668 - Creating test dataset.\n",
      "2018-12-09 21:12:04,384 - 69.71443819999695 s to load 120000 test examples (1875 test batches) to evaluate after all training steps.\n",
      "2018-12-09 21:22:27,041 - test roc_auc: 0.9708799938145076\n",
      "2018-12-09 21:22:27,044 - test average_precision: 0.49939594405677223\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEWCAYAAAB42tAoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xt8VOd95/HPTwJdLEuAJC66IYGFQWBjBDJgiG0wxhds4rbbTewkTZ1m43bbbNrdptt0t69tmia9JJvd7e6mm7hN6m52mzTpvpoasA0EjC+AbMBczM02CCOEhEGI+1WX3/5xjsRISMMgNBrN6Pt+vebFuT7nN2fQ/OY8z3meY+6OiIhIX9ISHYCIiAxtShQiIhKVEoWIiESlRCEiIlEpUYiISFRKFCIiEpUShUjIzCaa2XkzS7/Bdp82szWDFVc8mNmzZvZmxLybWWUiY5KhS4kihZnZh2Z2Kfzy63wV32KZi8ysYaBiHErcvd7db3f39hts93/d/ZHBiksk0ZQoUt/y8Muv89WYyGDMbEQylz+YLJAyf6M3ulKToStl/hPKzTGz+Wa2ycxOm9lOM1sUse5zZrbPzM6ZWZ2Z/Xq4PAd4GSiOvEIxsxfM7OsR+3e76givbH7fzHYBF8xsRLjf/zOzE2Z2yMy+FCXWF8zsu2a2NozpNTMrj1jvZvZbZvYB8EG4bFq4fYuZvWdmn4jYPtvMvm1mh83sjJm9GS6rCMsaEW73bPj+z4UxfjpieWS1zQIz2xKWtcXMFkSs22Bmf2JmG8Ny1phZYZT3usHMvmFmG4GLwGQzG2Vm3zezJjM7amZfj/zSNbMvRHxee81sdrj8K2Z2MGL5L/Z13GjMLN/M/tbMGs3slJn9rLfzEPFZVEZ8bv/LzF4yswvAH5jZsR6x/2L4/wIzS4uI+aSZ/cTM8sN1WWb2f8Llp8PzPL4/70f6wd31StEX8CHwcC/LS4CTwDKCHwtLw/mx4fongDsAAx4k+MKaHa5bBDT0KO8F4OsR8922CePYAZQB2eExtwH/CcgAJgN1wKN9vI8XgHPAA0Am8JfAmxHrHVgL5Ifl5wBHgM8BI4DZQDMwI9z+O8CG8DykAwvCcivCskaEZZwFpob7FEXs/2zn8cNjngJ+JdzvmXC+IFy/ATgI3BnGtgH48yif2QagHpgRljcS+BnwvTCmccDbwK+H2/9L4Chwb/h5VQLlEeuKw/P9SeACUNTzPUScw8o+YloF/AMwJoznwd7K6FlO+LmdARaGMWSF52JpxPY/Bb4STv8OUAuUhp/H94Afhet+HVgB3BZ+ZnOAvET/jQ2XV8ID0CuOH27wBX0eOB2+fhYu/33ghz22XQ38ah/l/Az47XB6Ef1LFL8WMT8PqO9Rxh8Af9vH8V8AfhwxfzvQDpSF8w48FLH+k8AbPcr4HvBH4RfWJeCeXo5TQfdEcRr4F0B2j+26viAJEsTbPdZvBp4NpzcAfxix7jeBV6J8ZhuAr0XMjweuRMZAkIxejfjcfjvG/w87gKd6voeIc3hdoiBIkB3AmF7WdSujZznh5/a/e6z/OvCDcDqXIHmVh/P7gCU9jt0afh6/BmwCZib672o4vlT1lPp+wd1Hh69fCJeVA/8yvIQ/bWangY8R/GFiZo+bWW1YbXOa4Mqjz+qSGB2JmC4nqL6KPP5/IPhSvOH+7n4eaCH4tdxX+fN6lP9pYEL4Pjp/2fbJ3S8QJJzfAJrMbJWZTetl02LgcI9lhwmuVjodi5i+SJDoCKvTOqvw/kOU9zIyjKHzvXyP4MoCgqu0Xt+LmX3WzHZE7HcXN/85lgEt7n7qJvfrdKTH/N8Dv2RmmcAvAe+4e+f5Kwf+KSLefQQ/CMYDPyRIij8Oq8C+aWYj+xmT3KSUafiTm3KE4IriCz1XhH/A/w/4LPDP7t4a1klbuElvww1fIKgS6DShl20i9zsCHHL3KTcRc1lEjLcTVPlENsz3LP81d1/asxALGocvE1St7Yx2QHdfDaw2s2yCX8J/DdzfY7NGgi+4SBOBV6KVHZb/GwSJ6LpVEdNHCK4oCt29rZdtjxC8l27CNpy/BpYAm9293cx2cO1zjNURIN/MRrv76R7run3uZnajzx1332tmh4HHgU8RJI7IY/2au2/sI5Y/Bv7YzCqAl4D3gO/H/lakv3RFMTz9H2C5mT1qZulhQ+EiMyslaDPIBE4AbWb2OBB5K+hHQIGZjYpYtgNYFjZ6TiCoa47mbeCsBQ3c2WEMd5nZvVH2WWZmHzOzDOBPgLfcveev1U4rgTvN7FfMbGT4utfMqty9A/gB8F8saFBPN7P7wgTZxczGm9nHLWjAv0JQhdfbbbMvhcf6lAWN9J8Epocx3DJ3bwLWAN82s7ywwfcOM3sw3ORvgC+b2RwLVIZJIofgS/pE+H4+R3BF0Z/jvwz8lZmNCc/lA+HqncAMM5tlZlnAV2Ms9u+BLxG0Of00Yvl3gW+E8WNmY83sqXB6sZndHTaEnyWokop6G7MMHCWKYSj8gn2KoLrnBMEvud8D0tz9HMEf8U8IGmU/BbwYse9+4EdAXVhFUExQLbCToC1iDUHDZ7TjtwPLgVnAIYKG5r8BRkXZ7e8J2hhaCBoyPx2l/HMEye1pgl/8x4C/IEiAAF8G3gW2hOX9Bdf/LaQBvxvu30LQqP+bvRzrJPBkuO1J4N8DT7p7c5T3crM+S5DA9xJ8Jv9IWE3o7j8FvkFwfs4RtCflu/te4NsE7SUfAXcDff1Sv5FfIfhi3g8cJ/wh4O7vA18Dfk5wt9mbfRXQw48I2rHW9zhPf0nwf22NmZ0jaNieF66bQPC+zxJUSb1G8INHBoGFjUYiQ5aZvUDQOP6HiY5FZDjSFYWIiESlRCEiIlGp6klERKLSFYWIiESVdP0oCgsLvaKiItFhiIgklW3btjW7+9j+7Jt0iaKiooKtW7cmOgwRkaQSdnTsF1U9iYhIVEoUIiISlRKFiIhEpUQhIiJRKVGIiEhUShQiIhJV3BKFmf3AzI6b2e4+1puZ/XczO2Bmuyx8zq+IiAwt8byieAF4LMr6x4Ep4es54H/FMRYREemnuCUKd3+dYBz/vjxF8Dxdd/daYLSZFd2o3PPnz9PerueViIgMlkS2UZTQ/Xm6DXR/znAXM3vOzLaa2daWlhba2np7IqSIiMRDIhNFb8/u7XUoW3d/3t1r3L1m9OjRcQ5LREQiJTJRNABlEfOlBI+dFBGRISSRieJF4LPh3U/zgTPhg9xFRGQIidvosWbW+QD1QjNrAP4IGAng7t8FXgKWAQeAi8Dn4hWLiIj0X9wShbs/c4P1DvxWvI4vIiIDQz2zRUQkKiUKERGJSolCRESiUqIQEZGolChERCQqJQoREYlKiUJERKJSohARkaiUKEREJColChERiUqJQkREolKiEBGRqJQoREQkKiUKERGJSolCRESiUqIQEZGolChERCQqJQoREYlKiUJERKJSohARkaiUKEREJColChERiUqJQkREolKiEBGRqJQoREQkKiUKERGJSolCRESiSrpE4e64e6LDEBEZNpIuUQA0NzcnOgQRkWEjKRNFe3t7okMQERk2kjJRiIjI4FGiEBGRqOKaKMzsMTN7z8wOmNlXelk/0cxeNbPtZrbLzJbFMx4REbl5cUsUZpYOfAd4HJgOPGNm03ts9ofAT9y9Gnga+Kt4xSMiIv0TzyuKucABd69z96vAj4GnemzjQF44PQpojKXg8+fPD1iQIiISXTwTRQlwJGK+IVwW6avAZ8ysAXgJ+De9FWRmz5nZVjPbeubMGerq6uIRr4iI9CKeicJ6Wdazp9wzwAvuXgosA35oZtfF5O7Pu3uNu9eMGjUqDqGKiEhf4pkoGoCyiPlSrq9a+jzwEwB33wxkAYVxjElERG5SPBPFFmCKmU0yswyCxuoXe2xTDywBMLMqgkRxIo4xiYjITYpbonD3NuCLwGpgH8HdTXvM7Gtm9vFws98FvmBmO4EfAc96PwZyOnfuHNu3bx+o0EVEJMKIeBbu7i8RNFJHLvtPEdN7gYW3epy6ujoaGhqorq6+1aJERKSHlOiZffLkyUSHICKSslIiUWiQQBGR+En6RNHc3Mzly5cTHYaISMpK+kTR0NCQ6BBERFJa0ieKI0eudf7etGlTAiMREUlNSZ0oOjo6us2rUVtEZOAldaLobJuYPHly17KeyUNERG5N0iYKd+fChQsAjBkzpmu5RpYVERlYSZsoVq5cyaVLl8jMzKS4uJjp04NHXaSlJe1bEhEZkpL6W/XUqVOMHj0agLFjxyY4GhGR1JTUiaK+vp7MzEwA8vLyuP322xMckYhI6knqRAGQm5vbNX3+/HkuXbqUwGhERFJP0iWK9PR00tPTu+ZHjhzZbb1ukRURGVhJlygyMjKIHIm8s+oJoKCggPz8/ESEJSKSspIuUfSUlZXVNX3y5MluPbVFROTWJWWiiOxUl52d3W1dY2PPp62KiMitSMpEESmyvaI3HR0dnDp1qs/158+f5+zZswMdlohIyojrE+4GQ2QHu6qqKq5evdptfV1dHfv27WP58uW97v/qq68CkJOTw0MPPRS/QEVEklTSX1FEc/r0afbt2wfAoUOHrlsfuaxzOBAREekupRPFG2+80TW9e/fublcbJ0+eZPfu3QCYGQAHDx7stv/u3bvZsmULH374Ybc7rW5k7969rF+/nvr6+pj3uZnyRUQGU9JXPUU6c+YMjY2NTJ8+vdcv6fr6ek6dOsWxY8e6ls2dO5f09HQ2b97M3r17KSwsJD09nU2bNnHlyhUAjh07xrhx47jtttsA2Lx5M83NzQDdqrSamprYunVr1/zOnTuZOHEiAG1tbXz00Ue0tbWxa9cu5s2bx1tvvUV2dnavnQQfeeSRbrf+iogkSkolis47ntydnTt3AkG7RWVlJStWrOiqhup09913M378+G7LXn/99V7LXrduXa/LW1tbGTlyJOvXr++qvsrPz6e9vZ0zZ87Q2tqKmfHyyy932++tt94C6LMn+Zo1a7qmCwoKOH/+PJmZmdTU1JCRkdG1X15eXtd27e3tdHR0dB179OjRSjYicstSKlEUFxfT2NjIypUrgaCPRWVlZZ/bV1RUdE0vX76cFStWdFvfebXQc3nk9q+88kq35XfeeSdTp07t2q/n+okTJ3LlyhU++ugjli1bxsmTJxk3bly3ba5evcrq1au75jt7m1+5coX169f3+l6ysrL6fHb4Qw89RE5OTldyaWpqYs+ePYwcOZKioiJKS0t5//33u66SMjIyePjhh294R5mIDA8plSiqqqq69aNYunRp13RkIujrDqgZM2YwZswYsrOzu3XkW7x4MRs3bmTx4sWcPHmSoqKi6/YtKChgwYIFfcb26KOPkpGRcd3ynkkCgi/qvmJsbm5mxIjgY2tqauLAgQNA0J9k+vTpnD59mpKSEkaPHt31fvtKLq2trdTX13dV02VkZFBVVcXOnTt56aWXurb72Mc+1u2ZH0DXlUvPIVREJPVYsjWizpw507/xjW8wadIkKisru32hQ/df/z2/bPfv309FRcV1+/RXY2Mj27Zt6/NLHeD48eOMGTMmoV+ojY2NtLa2UlZWhpl1Nd7Dtc6LkbcZnz59mjfeeKPrCq1Tb1ctOTk5zJ07t2vk3s6rlp4dIUUkscxsm7vX9GvfZEsUd999t//pn/4p999/f9ezKHpasWIFS5cuHbCEMJy5O2+++SanT5+moqKCpqYmqqurSU9Pp76+PuqQKfn5+SxYsKBbYhKRxBhWieKuu+7yP/uzP4v6K14Gz4ULFzh37hxHjhxh1qxZpKenc+HCBbZu3dr1WNqSkhJKS0sZO3askoZIgtxKokipNgoZfDk5OeTk5DBhwoSuZbm5uSxevJjt27fT0NDA0aNHOXr0KICu9ESSkBKFxE11dTXV1dVA0Mfl9ddfZ+3atUyYMIGJEyeSm5vLyJEj1SAuMsQpUcigGDVqFI8++iirV6/m2LFj3To9dq5/4IEHEhSdiESTdImivb090SFIP0Xe9tva2sqIESO4fPkymzZt4syZM6xYsYL8/HxmzZpFTk5OgqMVkU4xJwozKwHKI/dx9967MceRGkNTQ2d1U3Z2NkuWLOHIkSPs2LGDlpYW1q9fT0lJCePHj6egoIC0tLRe+6CIyOCIKVGY2V8AnwT2Ap0/6R2ImijM7DHgL4F04G/c/c972eYTwFfD8na6+6diDV5SR1lZGWVlZQAcPnyYXbt2dTWAA0ybNo0pU6YkKjyRYS3WK4pfAKa6+5VYCzazdOA7wFKgAdhiZi+6+96IbaYAfwAsdPdTZnZ9N2UZdsrLyykvL6etrQ1355VXXmH//v3s37+fe++9t9sdViISf7EmijpgJBBzogDmAgfcvQ7AzH4MPEVwVdLpC8B33P0UgLsfv4nyJcV1DlWyfPlyDhw4wL59+9iyZUu3bWpqanodUkVEBk6sieIisMPM1hGRLNz9S1H2KQEiu+02APN6bHMngJltJKie+qq7v0IUasweniorK6msrKStrY133nmH9vZ2mpubu4Z1Hzt2LPPnz09wlCKpKdZE8WL4uhm9tTr37AY+ApgCLAJKgTfM7C53P92tILPngOeA64YFl+FlxIgRzJ07t2u+paWFjRs3cuLECVasWMGDDz5Idna2+maIDKCYEoW7/52ZZRBeAQDvuXvrDXZrAMoi5kuBxl62qQ3LOmRm7xEkjm71C+7+PPA8wLRp05JrzBGJq/z8fJYvX87ly5d5++23ee211/rcNicnh7y8PEpLS8nKyupzrDAR6S7Wu54WAX8HfEhwpVBmZr96g9tjtwBTzGwScBR4Guh5R9PPgGeAF8yskCAR1d3MGxCBYGTbBx54gNbWVpqamjh37hxlZWUcOnSI+vp60tPTyc3NpampiaamJiB46JO7M3PmTPLz8xP8DkSGrlirnr4NPOLu7wGY2Z3Aj4A5fe3g7m1m9kVgNUH7ww/cfY+ZfQ3Y6u4vhuseMbPO225/z91P9v/tyHA3cuTIrsfPAtxzzz3cc889123X0tLCkSNHqK+vZ+PGjUDwbJDi4mKKi4v10CaRCDGNHmtmu9x95o2WDYZp06b5t771LY0eKwPmwoULnD59msOHD3c9TRBgwoQJzJ49G3enra2NjIyMbs/tEEkmgzF67FYz+z7ww3D+08C2/hzwVqWnp+uPVQZU5wi4JSUlXcsOHTrE7t27uz3pD4I2keLiYsrLy/X/UIaNWK8oMoHfAj5G0EbxOvBXN9MBb6DU1NR45y2RIvHU0dFBU1MT48ePx8yoq6tj//79XevnzZtHZmYmra2tFBYWJjBSkRsbVg8uUqKQROu8Jbcv6gQoQ1HcEoWZ/cTdP2Fm73J9HwgS0UahRCFDTVtbGxcuXKClpYXdu3d3LU9PT6egoID8/HyNUyUJF882it8O/32yP4WLDAcjRoxg1KhRjBo1ikmTJnH16lUaGhpoa2vjypUrXeNUTZw4kZkzZ2oEZEk6UROFuzeFk83AJXfvCG+NnQa8HO/gRJJRRkYGkydP7pqfMWMGhw8fZvfu3dTX15OXl8fUqVPJyckhNzc3gZGKxCbWu55eB+43szHAOmArwbDjn45XYCKpIi0tjUmTJjFp0iTOnDnD7t27uwY3NDPmzp3LuHEaOFmGrlgThbn7RTP7PPA/3P2bZrY9noGJpKJRo0axcOFCAK5evcrGjRt56623qKqqYvLkybrlVoakWP9XmpndR3AFsSpclnSPURUZSjIyMli8eDGVlZXs27ePVatWcf78+USHJXKdWBPF7xA8YOifwmE4JgOvxi8skeGjqqqKJ598kvT0dF599VW2b9fFugwt6kchMoR0PjscYOLEidx5551kZ2cnOCpJBXG7PdbM/pu7/46ZraD3fhQf789BRaR3ZWVllJaW0tjYyLvvvkt9fT3Tpk2jsrJSt9VKwtyonaFzbKf/HO9ARCRgZpSUlFBcXMzKlSu7+mFMmzaNcePGMWrUqESHKMNMrGM95RD2owjn04FMd78Y5/iuo6onGW5OnDhBbW1tt2VZWVkUFBSQl5fHHXfcoasNuaHBGD12HfAw0HlLRjawBljQn4OKSOzGjh3bNax+R0cHra2ttLS0cPbsWfbt20dzczPl5eUaX0riJtZEkeXuXfftuft5M7stTjGJSB/S0tLIzMykqKiIoqIimpubaWlp4cSJEwCUlJSQmZlJYWEhY8eOVb8MGRCxJooLZjbb3d8BMLM5wKX4hSUisejsvOfuHDp0iMbGRo4ePUpdXfBE4ZKSEs6ePcuYMWO4++67lTikX2JNFL8D/NTMGsP5IoIhPERkCDAzJk+e3DXGVFtbG8eOHePixYucOnWK+vp66uvrKSgoYNasWdx2myoEJHYx96Mws5HAVIIHF+1399Z4BtYXNWaL3LyrV69y8OBBDhw4AARVWEuWLCErKyvBkclguZXG7JiuQ8P2iN8Hftvd3wUqzExDj4skiYyMDKqqqli+fDn33nsvHR0drF27litXBv0hlZKEYq2w/FvgKnBfON8AfD0uEYlIXE2YMIGHH34YgDVr1rBt27YERyRDXaxtFHe4+yfN7BkAd79kunFbJGllZ2fzxBNP8MEHH/D+++9z/vx5cnNzmTZtmtov5DqxJoqrZpZNOIyHmd0B6JpVJImlpaUxdepUJk6cSFNTE/v27ePo0aOMGzeOefPmJTo8GUJiTRR/BLwClJnZ/wUWAs/GKygRGTzZ2dldd0wdO3aMLVu2sGLFCiAY2baysjLBEUqi3fCup7CKqRS4CMwnuOup1t2b4x/e9XTXk0j8Xb16lS1bttDS0kJRURE1Nf26WUaGkFu56ynWsZ62ufuc/hxgoClRiAwOd2fXrl3U19cDUF5eTkVFBXl5eQmOTPoj7rfHArVmdm9/DiAiycnMuOeee1i6dClTp07l3LlzvPbaa3oK3zAUa6JYTJAsDprZLjN718x2xTMwERkasrKyuPPOO1m4cCE5OTls2LCBjz76iGR76Jn0X6yN2Y/HNQoRSQrV1dW8//77vP322wBMnjyZiooKcnJyEhyZxNONnnCXBfwGUAm8C3zf3dsGIzARGXrGjBnDvHnzcHcOHz7MwYMHqaurY8yYMSxcuFDPxUhRN6p6+jughiBJPA58O+4RiciQZ2ZUVFSwZMkSpk2bxqlTp1i5ciUffvhhokOTOLhR1dN0d78bwMy+D7wd/5BEJJlMmTKFyZMnU1tby7vvvkt2djbjx49PdFgygG50RdE1QqyqnESkL+np6SxYsIDi4mLefvttVq5cycWLg/6kZImTGyWKe8zsbPg6B8zsnDazszcq3MweM7P3zOyAmX0lyna/bGZuZurVI5KkzIw5c+awZMkS0tLSWLduHS0tLYkOSwZA1ETh7ununhe+ct19RMR01F43ZpYOfIegbWM68IyZTe9lu1zgS8Bb/X8bIjJU3HbbbSxbtoyCggI2btzIzp07uXDhQqLDklsQz+cizgUOuHudu18Ffgw81ct2fwJ8E7gcx1hEZJAtWLCA2bNn09zczPr169m8eTOXL+vPPBnFM1GUAEci5hvCZV3MrBooc/eV0Qoys+fMbKuZbe18iLyIDH0lJSUsWbKEmpoazp49y9q1azl37lyiw5KbFM9E0dsN1V1dOc0sDfivwO/eqCB3f97da9y9ZuzYsQMYoogMhqKiIh599FHy8vLYsGEDb7zxBs3NCRlXVPohnomiASiLmC8FGiPmc4G7gA1m9iHByLQvqkFbJHU9+OCDzJw5k9OnT7N582Z+/vOfc+zYMdrb2xMdmkQR6xAe/bEFmGJmk4CjwNPApzpXuvsZoLBz3sw2AF92dw0NK5LCysvLKS8v59KlS+zatYstW7YAwXAgU6dOZcSIeH4tSX/E7RNx9zYz+yKwGkgHfuDue8zsa8BWd38xXscWkaEvOzu7aziQQ4cO8cEHH1BXV8fo0aOZO3cumZmZiQ5RQjE9j2Io0fMoRFLX2bNn2bhxI21tbZSWllJaWkpBQQFpafGsJR8ebuV5FLrGE5EhIy8vj8cee4yGhgaOHDlCbW0tAIsWLSI3NzfB0Q1fShQiMqSYGWVlZZSVldHe3s5rr73Ghg0byMvLY86cOdx+++2JDnHYUaIQkSErPT2dhx56iAMHDrBv3z5effVVRowYQXFxMTNnztSw5oNEiUJEhrzKykoqKytpbW3l4MGDfPDBB9TX1zNz5kxKS0tJT09PdIgpTS1EIpI0Ro4cybRp01i+fDl33HEHu3bt4qWXXqKjoyPRoaU0JQoRSUrTp09nyZIlAKxatYqrV68mOKLUpUQhIknrtttu44knngBg9erVHD9+nLY2PTpnoKmNQkSSWlpaGg8//DA7duxgy5YtdHR0kJeXx4IFCxg5cmSiw0sJShQikvSys7O57777ADh58iSbNm3ilVdeYfTo0VRXV+uW2lukntkikpKOHj3Ke++91/XQpAULFlBQUJDgqBJHPbNFRHooKSmhpKSka/DBTZs2MXLkSBYvXqxxpG6SEoWIpLTOwQevXLnCunXrWLNmDQDz589Hz7eJje56EpFhITMzk2XLlvHII48AUFtby9GjRxMcVXJQohCRYSUzM5Ply5dTWlrKO++8w4oVK2htbU10WEOaEoWIDEvV1dVdVxfvvPNOgqMZ2pQoRGTYyszMZMaMGRw/fpyXX36ZhoaGRIc0JKkxW0SGtcmTJ1NcXMzevXvZvn07Z86cYcaMGYkOa0jRFYWIDHtZWVnMnj2bqqoq6urqaGlpSXRIQ4oShYhIqLKykrFjx1JbW6sRaSMoUYiIRJg+fTrt7e2sWrWKbdu2cfr06WE/0KDaKEREIuTl5fHkk09y5MgR9u/fT2NjIwBLly4lKysrwdElhhKFiEgPZsbEiROZOHEi7s6bb77J2rVrue+++ygsLEx0eINOVU8iIlGYGffffz+FhYVs3ryZXbt2JTqkQadEISISg/vuu4+qqioOHz7M2rVruXz5cqJDGjRKFCIiMaqsrGTRokVkZGSwdu3argclpTolChGRm5Cbm8uDDz7I/fffz7Fjx1i1ahWHDx9OdFhxpUR+iWiwAAAK7klEQVQhItIPo0eP5sknn2TChAns2rWL2traRIcUN0oUIiL9ZGbce++9zJkzhxMnTnDs2LFEhxQXShQiIreouLiY0tJStmzZwp49exIdzoBTPwoRkQFQXV3NqFGj2LNnD3V1dZSVlTF16lSys7MTHdotU6IQERkgkydPpry8nOPHj7Njxw6OHDmSEp30lChERAZQeno6RUVFjB8/nh07drB582ZycnJYtGgRaWnJWdsf16jN7DEze8/MDpjZV3pZ/+/MbK+Z7TKzdWZWHs94REQGS1paGrNnz2bp0qVcuHCBjRs3cuXKlUSH1S9xSxRmlg58B3gcmA48Y2bTe2y2Hahx95nAPwLfjFc8IiKJkJWVxcKFC7ly5Qpr1qxhz549SZcw4nlFMRc44O517n4V+DHwVOQG7v6qu18MZ2uB0jjGIyKSEPn5+Tz88MPMmDGDxsZG1qxZk1S30sYzUZQARyLmG8Jlffk88HJvK8zsOTPbamZbT5w4MYAhiogMnsmTJ7N06VJyc3OTaviPeCYK62WZ97qh2WeAGuBbva139+fdvcbda8aOHTuAIYqIDL777rsPgG3btiU4ktjEM1E0AGUR86VAY8+NzOxh4D8CH3f35Kq4ExHph8zMTKqrqzl27BgrVqwY8m0W8UwUW4ApZjbJzDKAp4EXIzcws2rgewRJ4ngcYxERGVJKS0t54oknAFizZs2Qftxq3BKFu7cBXwRWA/uAn7j7HjP7mpl9PNzsW8DtwE/NbIeZvdhHcSIiKSctLY1HH30UgJdffnnIJgtz77XZYMiqqanxrVu3JjoMEZEB09HRwapVqwCYP38+8WiLNbNt7l7Tn32Ts5ugiEgKSUtLY/ny5YwdO5ba2louXrx4450GkRKFiMgQMX/+fG6//XbWrVtHY+N19/4kjBKFiMgQ8uCDD1JaWsq2bds4ePBgosMBNCigiMiQkpaWRnV1Nfn5+ezatQuAO+64I7ExJfToIiLSq/LycioqKti7dy+tra0JjUWJQkRkiLr77rtJT0/njTfeIJF3qCpRiIgMYXPnzuXChQusXLmSCxcuJCQGJQoRkSGssLCQpUuXArB+/fqExKBEISIyxGVlZXX14E5EHwslChGRJJCRkUFRURHr1q3j+PHBHRpPiUJEJEnU1NRQXFzMW2+9xY4dOwbtuOpHISKSRObMmUNxcTFbt24lLS2NmTNnxv2YuqIQEUkyRUVFzJs3j8OHD/POO+/E/XhKFCIiSWjcuHHce++9HD16lNra2rgeS4lCRCRJTZgwgerqak6cOMFHH30Ut+MoUYiIJLHS0lLGjRvH22+/TUdHR1yOoUQhIpLk5s2bB8DOnTvjUr4ShYhICpgyZQoNDQ1xGeZDiUJEJAVMmzaNzMzMuAzzoUQhIpIiHnroIQBWrFhBe3v7gJWrRCEikiJGjBjRNSbUu+++O2DlKlGIiKSQjIwMysrKuHTp0oCVqUQhIpJixo0bR3NzM5cvXx6Q8pQoRERSTFFREQC7d+8ekPKUKEREUoyZUVlZSVNTE2fPnr3l8pQoRERSUFVVFVlZWWzcuPGWy1KiEBFJUfPnz6etre2Wq6CUKEREUlRubi7jxo3j0KFDt1SOEoWISAqbNWvWLZehRCEiksIyMzMZNWrULZWhRCEikuLM7Jb2V6IQEUlxhYWFt7S/EoWISIqrqqq6pf3jmijM7DEze8/MDpjZV3pZn2lm/xCuf8vMKuIZj4iI3Ly4JQozSwe+AzwOTAeeMbPpPTb7PHDK3SuB/wr8RbziERGR/onnFcVc4IC717n7VeDHwFM9tnkK+Ltw+h+BJXarrS4iIjKgRsSx7BLgSMR8AzCvr23cvc3MzgAFQHPkRmb2HPBcOHvFzAZmpKvkV0iPczWM6Vxco3Nxjc7FNVP7u2M8E0VvVwbej21w9+eB5wHMbKu719x6eMlP5+IanYtrdC6u0bm4xsy29nffeFY9NQBlEfOlQGNf25jZCGAU0BLHmERE5CbFM1FsAaaY2SQzywCeBl7ssc2LwK+G078MrHf3664oREQkceJW9RS2OXwRWA2kAz9w9z1m9jVgq7u/CHwf+KGZHSC4kng6hqKfj1fMSUjn4hqdi2t0Lq7Rubim3+fC9ANeRESiUc9sERGJSolCRESiGrKJQsN/XBPDufh3ZrbXzHaZ2TozK09EnIPhRuciYrtfNjM3s5S9NTKWc2Fmnwj/b+wxs78f7BgHSwx/IxPN7FUz2x7+nSxLRJzxZmY/MLPjffU1s8B/D8/TLjObHVPB7j7kXgSN3weByUAGsBOY3mOb3wS+G04/DfxDouNO4LlYDNwWTv/r4Xwuwu1ygdeBWqAm0XEn8P/FFGA7MCacH5fouBN4Lp4H/nU4PR34MNFxx+lcPADMBnb3sX4Z8DJBH7b5wFuxlDtUryg0/Mc1NzwX7v6qu18MZ2sJ+qykolj+XwD8CfBN4PJgBjfIYjkXXwC+4+6nANz9+CDHOFhiORcO5IXTo7i+T1dKcPfXid4X7Sngf3ugFhhtZkU3KneoJorehv8o6Wsbd28DOof/SDWxnItInyf4xZCKbnguzKwaKHP3lYMZWALE8v/iTuBOM9toZrVm9tigRTe4YjkXXwU+Y2YNwEvAvxmc0Iacm/0+AeI7hMetGLDhP1JAzO/TzD4D1AAPxjWixIl6LswsjWAU4mcHK6AEiuX/xQiC6qdFBFeZb5jZXe5+Os6xDbZYzsUzwAvu/m0zu4+g/9Zd7t4R//CGlH59bw7VKwoN/3FNLOcCM3sY+I/Ax939yiDFNthudC5ygbuADWb2IUEd7Isp2qAd69/IP7t7q7sfAt4jSBypJpZz8XngJwDuvhnIIhgwcLiJ6fukp6GaKDT8xzU3PBdhdcv3CJJEqtZDww3OhbufcfdCd69w9wqC9pqPu3u/B0MbwmL5G/kZwY0OmFkhQVVU3aBGOThiORf1wBIAM6siSBQnBjXKoeFF4LPh3U/zgTPu3nSjnYZk1ZPHb/iPpBPjufgWcDvw07A9v97dP56woOMkxnMxLMR4LlYDj5jZXqAd+D13P5m4qOMjxnPxu8Bfm9m/JahqeTYVf1ia2Y8IqhoLw/aYPwJGArj7dwnaZ5YBB4CLwOdiKjcFz5WIiAygoVr1JCIiQ4QShYiIRKVEISIiUSlRiIhIVEoUIiISlRKFSA9m1m5mO8xst5mtMLPRA1z+s2b2P8Ppr5rZlweyfJGBpkQhcr1L7j7L3e8i6KPzW4kOSCSRlChEottMxKBpZvZ7ZrYlHMv/jyOWfzZcttPMfhguWx4+K2W7mf3czMYnIH6RWzYke2aLDAVmlk4w7MP3w/lHCMZKmkswuNqLZvYAcJJgnK2F7t5sZvlhEW8C893dzexfAf+eoIewSFJRohC5XraZ7QAqgG3A2nD5I+Frezh/O0HiuAf4R3dvBnD3zsEpS4F/CMf7zwAODUr0IgNMVU8i17vk7rOAcoIv+M42CgP+LGy/mOXule7+/XB5b2Ph/A/gf7r73cCvEwxEJ5J0lChE+uDuZ4AvAV82s5EEg879mpndDmBmJWY2DlgHfMLMCsLlnVVPo4Cj4fSvIpKkVPUkEoW7bzezncDT7v7DcIjqzeEoveeBz4QjlX4DeM3M2gmqpp4leKraT83sKMGQ55MS8R5EbpVGjxURkahU9SQiIlEpUYiISFRKFCIiEpUShYiIRKVEISIiUSlRiIhIVEoUIiIS1f8HpctSkeqwhN4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "parse_configs_and_run(configs, lr=0.01)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "test-selene-env",
   "language": "python",
   "name": "test-selene-env"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
